/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.brain.cobranza.dto;

import com.brain.core.dto.ParametroDto;
import com.brain.segu.dto.UsuarioDto;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.TableGenerator;
import javax.persistence.Transient;
import javax.validation.constraints.Size;
import org.hibernate.annotations.LazyCollection;
import org.hibernate.annotations.LazyCollectionOption;

/**
 *
 * @author Hvives
 */
@Entity
@Table(name = "TCOB_EMPRESA_CLIENTE")
public class EmpresaClienteDto implements Serializable {

    private static final long serialVersionUID = 1L;
    // @Max(value=?)  @Min(value=?)//if you know range of your decimal fields consider using these annotations to enforce field validation
    @Id
    @GeneratedValue(strategy = GenerationType.TABLE, generator = "SEQ_TCOB_EMPRESA_CLIENTE")
    @TableGenerator(name = "SEQ_TCOB_EMPRESA_CLIENTE", table = "TCORE_ENTIDAD", pkColumnName = "NOMBRE", valueColumnName = "CORRELATIVO", pkColumnValue = "TCOB_EMPRESA_CLIENTE", allocationSize = 1)
    private Long id;
    @JoinColumn(name = "EMPRESA", referencedColumnName = "ID")
    @ManyToOne
    private EmpresaCobranzaDto empresaCobranzaDto;
    @JoinColumn(name = "CLIENTE", referencedColumnName = "ID")
    @ManyToOne
    private ClienteDto clienteDto;
    @JoinColumn(name = "CARGA", referencedColumnName = "ID")
    @ManyToOne
    private CargaDto cargaDto;
    @JoinColumn(name = "LINEA", referencedColumnName = "ID")
    @ManyToOne
    private CargaDetaDto cargaDetaDto;
    @Size(max = 20)
    @Column(name = "TELEFONO_DOMICILIAR")
    private String telefonoDomiciliar;
    @Size(max = 20)
    @Column(name = "TELEFONO_LABORAL")
    private String telefonoLaboral;
    @Size(max = 20)
    @Column(name = "TELEFONO_CELULAR_1")
    private String telefonoCelular1;
    @Size(max = 20)
    @Column(name = "TELEFONO_CELULAR_2")
    private String telefonoCelular2;
    @Size(max = 200)
    @Column(name = "DIRECCION_DOMICILIO")
    private String direccionDomicilio;
    @Size(max = 200)
    @Column(name = "DIRECCION_LABORAL")
    private String direccionLaboral;
    @Size(max = 20)
    @Column(name = "TEL_OTRO_1")
    private String telOtro1;
    @Size(max = 20)
    @Column(name = "TEL_OTRO_2")
    private String telOtro2;
    @Size(max = 20)
    @Column(name = "TEL_OTRO_3")
    private String telOtro3;
    @Column(name = "DEUDA_CLIENTE")
    private Long deudaCliente;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "empresaClienteDto", fetch = FetchType.LAZY)
    @LazyCollection(LazyCollectionOption.FALSE)
    private List<DeudaClienteDto> listaDetalle;
    //Datos de la DeudaCliente
    @Transient
    private Long idDeudaCliente;
    @Transient
    private String descripcion;
    @Transient
    private Long diasMora;
    @Transient
    private Date fechaVencimiento;
    @Transient
    private String moneda;
    @Transient
    private BigDecimal montoMinimo;
    @Transient
    private BigDecimal montoTotal;
    @Transient
    private ProductoEmpresaDto productoEmpresaDto;
    @Transient
    private ParametroDto estadoDeudaDto;
    @Transient
    private Long cuotasVencidas;
    @Transient
    private Long totalCuotas;
    @Transient
    private BigDecimal montoCuota;
    @Transient
    private BigDecimal capitalDeuda;
    @Transient
    private BigDecimal intereses;
    @Transient
    private BigDecimal descuento;
    @Transient
    private List<PagoDto> listaPagos;
    @Transient
    private List<ComunicacionDto> listaAcciones;
    @Transient
    private Long cuotasPorVencer;
    @Transient
    private UsuarioDto gestorDto;
    @Transient
    private Boolean isDisplayed;
    @Transient
    private String estadoTexto;
    @Transient
    private String nombresApellidos;
 

    public EmpresaClienteDto() {
    }

    public EmpresaClienteDto(Long id) {
        this.id = id;
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public EmpresaCobranzaDto getEmpresaCobranzaDto() {
        return empresaCobranzaDto;
    }

    public void setEmpresaCobranzaDto(EmpresaCobranzaDto empresaCobranzaDto) {
        this.empresaCobranzaDto = empresaCobranzaDto;
    }

    public ClienteDto getClienteDto() {
        return clienteDto;
    }

    public void setClienteDto(ClienteDto clienteDto) {
        this.clienteDto = clienteDto;
    }

    public CargaDto getCargaDto() {
        return cargaDto;
    }

    public void setCargaDto(CargaDto cargaDto) {
        this.cargaDto = cargaDto;
    }

    public CargaDetaDto getCargaDetaDto() {
        return cargaDetaDto;
    }

    public void setCargaDetaDto(CargaDetaDto cargaDetaDto) {
        this.cargaDetaDto = cargaDetaDto;
    }

    public String getTelefonoDomiciliar() {
        return telefonoDomiciliar;
    }

    public void setTelefonoDomiciliar(String telefonoDomiciliar) {
        this.telefonoDomiciliar = telefonoDomiciliar;
    }

    public String getTelefonoLaboral() {
        return telefonoLaboral;
    }

    public void setTelefonoLaboral(String telefonoLaboral) {
        this.telefonoLaboral = telefonoLaboral;
    }

    public String getTelefonoCelular1() {
        return telefonoCelular1;
    }

    public void setTelefonoCelular1(String telefonoCelular1) {
        this.telefonoCelular1 = telefonoCelular1;
    }

    public String getTelefonoCelular2() {
        return telefonoCelular2;
    }

    public void setTelefonoCelular2(String telefonoCelular2) {
        this.telefonoCelular2 = telefonoCelular2;
    }

    public String getDireccionDomicilio() {
        return direccionDomicilio;
    }

    public void setDireccionDomicilio(String direccionDomicilio) {
        this.direccionDomicilio = direccionDomicilio;
    }

    public String getDireccionLaboral() {
        return direccionLaboral;
    }

    public void setDireccionLaboral(String direccionLaboral) {
        this.direccionLaboral = direccionLaboral;
    }

    public String getEstadoTexto() {
        return estadoTexto;
    }

    public void setEstadoTexto(String estadoTexto) {
        this.estadoTexto = estadoTexto;
    }

    public String getNombresApellidos() {
        return nombresApellidos;
    }

    public void setNombresApellidos(String nombresApellidos) {
        this.nombresApellidos = nombresApellidos;
    }

    public ProductoEmpresaDto getProductoEmpresaDto() {
        return productoEmpresaDto;
    }

    public void setProductoEmpresaDto(ProductoEmpresaDto productoEmpresaDto) {
        this.productoEmpresaDto = productoEmpresaDto;
    }
 

    public List<DeudaClienteDto> getListaDetalle() {
        return listaDetalle;
    }

    public void setListaDetalle(List<DeudaClienteDto> listaDetalle) {
        this.listaDetalle = listaDetalle;
    }

    public String getTelOtro1() {
        return telOtro1;
    }

    public void setTelOtro1(String telOtro1) {
        this.telOtro1 = telOtro1;
    }

    public String getTelOtro2() {
        return telOtro2;
    }

    public void setTelOtro2(String telOtro2) {
        this.telOtro2 = telOtro2;
    }

    public String getTelOtro3() {
        return telOtro3;
    }

    public void setTelOtro3(String telOtro3) {
        this.telOtro3 = telOtro3;
    }

    public Long getIdDeudaCliente() {
        return idDeudaCliente;
    }

    public void setIdDeudaCliente(Long idDeudaCliente) {
        this.idDeudaCliente = idDeudaCliente;
    }

    public String getDescripcion() {
        return descripcion;
    }

    public void setDescripcion(String descripcion) {
        this.descripcion = descripcion;
    }

    public Long getDiasMora() {
        return diasMora;
    }

    public void setDiasMora(Long diasMora) {
        this.diasMora = diasMora;
    }

    public Date getFechaVencimiento() {
        return fechaVencimiento;
    }

    public void setFechaVencimiento(Date fechaVencimiento) {
        this.fechaVencimiento = fechaVencimiento;
    }

    public String getMoneda() {
        return moneda;
    }

    public void setMoneda(String moneda) {
        this.moneda = moneda;
    }

    public BigDecimal getMontoMinimo() {
        return montoMinimo;
    }

    public void setMontoMinimo(BigDecimal montoMinimo) {
        this.montoMinimo = montoMinimo;
    }

    public BigDecimal getMontoTotal() {
        return montoTotal;
    }

    public void setMontoTotal(BigDecimal montoTotal) {
        this.montoTotal = montoTotal;
    }

    public Long getCuotasVencidas() {
        return cuotasVencidas;
    }

    public void setCuotasVencidas(Long cuotasVencidas) {
        this.cuotasVencidas = cuotasVencidas;
    }

    public Long getTotalCuotas() {
        return totalCuotas;
    }

    public void setTotalCuotas(Long totalCuotas) {
        this.totalCuotas = totalCuotas;
    }

    public BigDecimal getMontoCuota() {
        return montoCuota;
    }

    public void setMontoCuota(BigDecimal montoCuota) {
        this.montoCuota = montoCuota;
    }

    public BigDecimal getCapitalDeuda() {
        return capitalDeuda;
    }

    public void setCapitalDeuda(BigDecimal capitalDeuda) {
        this.capitalDeuda = capitalDeuda;
    }

    public BigDecimal getIntereses() {
        return intereses;
    }

    public void setIntereses(BigDecimal intereses) {
        this.intereses = intereses;
    }

    public BigDecimal getDescuento() {
        return descuento;
    }

    public void setDescuento(BigDecimal descuento) {
        this.descuento = descuento;
    }

    public ParametroDto getEstadoDeudaDto() {
        return estadoDeudaDto;
    }

    public void setEstadoDeudaDto(ParametroDto estadoDeudaDto) {
        this.estadoDeudaDto = estadoDeudaDto;
    }

    public List<PagoDto> getListaPagos() {
        return listaPagos;
    }

    public void setListaPagos(List<PagoDto> listaPagos) {
        this.listaPagos = listaPagos;
    }

    public List<ComunicacionDto> getListaAcciones() {
        return listaAcciones;
    }

    public void setListaAcciones(List<ComunicacionDto> listaAcciones) {
        this.listaAcciones = listaAcciones;
    }

    public Long getCuotasPorVencer() {
        if (this.totalCuotas != null && this.cuotasVencidas != null) {
            cuotasPorVencer = this.totalCuotas - this.cuotasVencidas;
        }
        return cuotasPorVencer;
    }

    public void setCuotasPorVencer(Long cuotasPorVencer) {
        this.cuotasPorVencer = cuotasPorVencer;
    }

    public UsuarioDto getGestorDto() {
        return gestorDto;
    }

    public void setGestorDto(UsuarioDto gestorDto) {
        this.gestorDto = gestorDto;
    }

    public Boolean getIsDisplayed() {
        return isDisplayed;
    }

    public void setIsDisplayed(Boolean isDisplayed) {
        this.isDisplayed = isDisplayed;
    }

    public Long getDeudaCliente() {
        return deudaCliente;
    }

    public void setDeudaCliente(Long deudaCliente) {
        this.deudaCliente = deudaCliente;
    }

    
    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof EmpresaClienteDto)) {
            return false;
        }
        EmpresaClienteDto other = (EmpresaClienteDto) object;
        if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "com.brain.cobranza.dto.EmpresaClienteDto[ id=" + id + " ]";
    }
}
